असेंबली भाषा संख्यात्मक डेटा और अंकगणितीय निर्देश बाइनरी डेटा पर कार्य करते हैं। जब संख्याएँ स्क्रीन पर प्रदर्शित होती हैं या कीबोर्ड से दर्ज की जाती हैं, तो वे ASCII रूप में होती हैं। हमें डेटा को समझने के लिए बाइनरी से ASCII या डेसीमल नंबर में कन्वर्ट करना होता है।
numbers in assembly language
असेम्बली लैंग्वेज प्रोग्रामिंग संख्या को बाइनरी रूप में अधिक कुशल तरीके से संसाधित करने की अनुमति देती है। दशमलव संख्याओं को दो रूपों में प्रदर्शित किया जा सकता है-
- ASCII form
- BCD or Binary Coded Decimal form
ASCII Representation
ASCII प्रतिनिधित्व में, दशमलव संख्या को ASCII वर्णों की एक स्ट्रिंग के रूप में संग्रहीत किया जाता है। उदाहरण के लिए, दशमलव मान 1234 को इस रूप में संग्रहीत किया जाता है-.
31 32 33 34H 49H
जहाँ, 31H 1 के लिए ASCII मान है, 32H 2 के लिए ASCII मान है, 39H 9 के लिए ASCII मान है, इत्यादि।
- AAA − ASCII Adjust After Addition
- AAS − ASCII Adjust After Subtraction
- AAM − ASCII Adjust After Multiplication
- AAD − ASCII Adjust Before Division
BCD Representation
बीसीडी प्रतिनिधित्व दो प्रकार के होते हैं-- Unpacked BCD
- Pack BCD
अनपैक्ड बीसीडी प्रतिनिधित्व में, प्रत्येक बाइट एक दशमलव अंक के बाइनरी समकक्ष को संग्रहीत करता है। उदाहरण के लिए, संख्या 1234 को इस रूप में संग्रहीत किया जाता है-
01 02 03 04H
इन नंबरों को प्रोसेस करने के लिए दो निर्देश हैं -
- AAM - Adjust After ASCII Multiplication
- AAD - Adjust before ASCII division
चार ASCII समायोजित निर्देश, AAA, AAS, AAM और AAD, का उपयोग अनपैक्ड BCD प्रतिनिधित्व के साथ भी किया जा सकता है। पैक्ड बीसीडी प्रतिनिधित्व में, प्रत्येक अंक को चार बिट्स का उपयोग करके संग्रहीत किया जाता है। दो दशमलव अंक एक बाइट में पैक किए जाते हैं। उदाहरण के लिए, संख्या 1234 को इस रूप में संग्रहीत किया जाता है -
12 34H
इन नंबरों को संसाधित करने के लिए दो निर्देश हैं-
- DAA − Decimal Adjustment After Addition
- DAS - Decimal Adjustment After Subtraction पैक्ड बीसीडी प्रतिनिधित्व में गुणा और भाग के लिए कोई समर्थन नहीं है।
Example
निम्न प्रोग्राम दो 5-अंकीय दशमलव संख्या जोड़ता है और योग प्रदर्शित करता है। -
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov esi, 4 ;pointing to the rightmost digit
mov ecx, 5 ;num of digits
clc
add_loop:
mov al, [num1 + esi]
adc al, [num2 + esi]
aaa
pushf
or al, 30h
popf
mov [sum + esi], al
dec esi
loop add_loop
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov edx,5 ;message length
mov ecx,sum ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'The Sum is:',0xa
len equ $ - msg
num1 db '12345'
num2 db '23456'
sum db '
जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है−
The Sum is: 35801